﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Autocentro.Entities;

namespace Autocentro.Respository
{
    public class ServicioProgramadoRepository:MasterRepository,IServicioProgramadoRepository
    {
        public List<SERVICIO_PROGRAMADO> GetAllFromServicioProgramadoByIdTipoVehiculo(int id)
        {
            var query = from c in context.ServicioProgramado
                        .Include("CARTERASERVICIOPROGRAMADO")
                            .Include("TIPO_VEHICULO")
                            .Include("TIPO_VEHICULO.PRODUCTO_TIPO_VEHICULO.PRODUCTO")
                            .Include("TIPO_VEHICULO.PRODUCTO_TIPO_VEHICULO.PRODUCTO.UNIDAD_MEDIDA")
                        where c.IdTipoVehiculo.Equals(id)
                        select c;
            return query.ToList();
        }

        public void AddServicioProgramado(SERVICIO_PROGRAMADO servicioprogramado)
        {
            servicioprogramado.TIPO_VEHICULO = null;
            context.ServicioProgramado.Add(servicioprogramado);
            context.SaveChanges();
        }

        public void UpdateServicioProgramado(SERVICIO_PROGRAMADO servicioprogramado)
        {
            servicioprogramado.TIPO_VEHICULO = null;
            context.Entry(servicioprogramado).State = System.Data.EntityState.Modified;
            context.SaveChanges();
        }


        public bool ExistDuplicidad(int id, string descripcion, int idtipovehiculo)
        {
            var query = from p in context.ServicioProgramado
                        where (p.Descripcion.ToUpper().CompareTo(descripcion.ToUpper()) == 0 &&
                        p.IdTipoVehiculo.CompareTo(idtipovehiculo) == 0) &&
                        p.Id != id
                        select p;
            return query.Any();
        }


        public SERVICIO_PROGRAMADO GetFromServicioProgramadoById(int id)
        {
            var query = from c in context.ServicioProgramado
                        .Include("CARTERASERVICIOPROGRAMADO")
                            .Include("TIPO_VEHICULO")
                            .Include("TIPO_VEHICULO.PRODUCTO_TIPO_VEHICULO.PRODUCTO")
                            .Include("TIPO_VEHICULO.PRODUCTO_TIPO_VEHICULO.PRODUCTO.UNIDAD_MEDIDA")
                        where c.Id.Equals(id)
                        select c;
            return query.SingleOrDefault();
        }


        public List<SERVICIO_PROGRAMADO> GetFromServicioProgramadoByIdTipoVehiculoAndDescripcion(int id, string descripcion)
        {
            if (descripcion != string.Empty)
            {
                var query = from c in context.ServicioProgramado
                           .Include("CARTERASERVICIOPROGRAMADO")
                               .Include("TIPO_VEHICULO")
                               .Include("TIPO_VEHICULO.PRODUCTO_TIPO_VEHICULO.PRODUCTO")
                               .Include("TIPO_VEHICULO.PRODUCTO_TIPO_VEHICULO.PRODUCTO.UNIDAD_MEDIDA")
                            where c.IdTipoVehiculo.Equals(id) && c.Descripcion.ToUpper().Contains(descripcion.ToUpper())
                            select c;
                return query.ToList();
            }
            else
            {
                var query = from c in context.ServicioProgramado
                        .Include("CARTERASERVICIOPROGRAMADO")
                            .Include("TIPO_VEHICULO")
                            .Include("TIPO_VEHICULO.PRODUCTO_TIPO_VEHICULO.PRODUCTO")
                            .Include("TIPO_VEHICULO.PRODUCTO_TIPO_VEHICULO.PRODUCTO.UNIDAD_MEDIDA")
                            where c.IdTipoVehiculo.Equals(id)
                            select c;
                return query.ToList();
            }
            
            
        }


        public void RemoveServicioProgramado(int id)
        {
            var existe = context.ServicioProgramado.Find(id);
            if (existe != null)
            {
                context.ServicioProgramado.Remove(existe);
                context.SaveChanges();
            }
        }
    }
}
